#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
#include <cmath>
#include <cstdlib>
#include <catch2/catch.hpp>
#include <utils.hpp>
#include <wasm_config.hpp>
#include <eosio/vm/backend.hpp>

using namespace eosio;
using namespace eosio::vm;
extern wasm_allocator wa;

BACKEND_TEST_CASE( "Testing wasm <float_misc_0_wasm>", "[float_misc_0_wasm_tests]" ) {
   using backend_t = backend<std::nullptr_t, TestType>;
   auto code = backend_t::read_wasm( std::string(wasm_directory) + "float_misc.0.wasm");
   backend_t bkend( code );
   bkend.set_wasm_allocator( &wa );
   bkend.initialize(nullptr);

   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1066388847)), bit_cast<float>(UINT32_C(789036054)))->to_f32()) == UINT32_C(1066388847));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4607738418748954166)), bit_cast<double>(UINT64_C(4458835772027226175)))->to_f64()) == UINT64_C(4607738418749510135));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(864026624)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(864026625)))->to_f32()) == UINT32_C(1065353217));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4368491638549381120)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4368491638549381121)))->to_f64()) == UINT64_C(4607182418800017409));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1)), bit_cast<float>(UINT32_C(8388607)))->to_f32()) == UINT32_C(8388608));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(1)), bit_cast<double>(UINT64_C(4503599627370495)))->to_f64()) == UINT64_C(4503599627370496));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1325400064)), bit_cast<float>(UINT32_C(1149241344)))->to_f32()) == UINT32_C(1325400068));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4890909195324358656)), bit_cast<double>(UINT64_C(4652219514585350144)))->to_f64()) == UINT64_C(4890909195324358657));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9290926031265333248)), bit_cast<double>(UINT64_C(5910)))->to_f64()) == UINT64_C(9290926031265333247));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4845873199050653696)), bit_cast<double>(UINT64_C(4607182463836013682)))->to_f64()) == UINT64_C(4845873199050653697));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4845873199050653697)), bit_cast<double>(UINT64_C(4607182281361063936)))->to_f64()) == UINT64_C(4845873199050653697));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1258291200)), bit_cast<float>(UINT32_C(1056964608)))->to_f32()) == UINT32_C(1258291200));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1258291201)), bit_cast<float>(UINT32_C(1056964608)))->to_f32()) == UINT32_C(1258291202));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4841369599423283200)), bit_cast<double>(UINT64_C(4602678819172646912)))->to_f64()) == UINT64_C(4841369599423283200));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4841369599423283201)), bit_cast<double>(UINT64_C(4602678819172646912)))->to_f64()) == UINT64_C(4841369599423283202));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(4070355885)), bit_cast<float>(UINT32_C(238773414)))->to_f32()) == UINT32_C(4070355885));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1630930834)), bit_cast<float>(UINT32_C(3650472296)))->to_f32()) == UINT32_C(1630930534));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(376639884)), bit_cast<float>(UINT32_C(24880479)))->to_f32()) == UINT32_C(376639884));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1393899754)), bit_cast<float>(UINT32_C(3680827526)))->to_f32()) == UINT32_C(3680827377));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(947682203)), bit_cast<float>(UINT32_C(1958603311)))->to_f32()) == UINT32_C(1958603311));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(2751474943031650218)), bit_cast<double>(UINT64_C(14953834855654151696)))->to_f64()) == UINT64_C(14953834855654151696));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(14174076479053295281)), bit_cast<double>(UINT64_C(3779173703388472492)))->to_f64()) == UINT64_C(14174076479053295281));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(3940735352412940081)), bit_cast<double>(UINT64_C(13776826739676942972)))->to_f64()) == UINT64_C(13776826739676942972));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(6845567588107709194)), bit_cast<double>(UINT64_C(4904758653169279867)))->to_f64()) == UINT64_C(6845567588107709194));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(6057047893039655554)), bit_cast<double>(UINT64_C(6381964069811498464)))->to_f64()) == UINT64_C(6381964069811498464));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1670249659)), bit_cast<float>(UINT32_C(3384781876)))->to_f32()) == UINT32_C(1670249659));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(692047414)), bit_cast<float>(UINT32_C(2564611463)))->to_f32()) == UINT32_C(692047414));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2862180574)), bit_cast<float>(UINT32_C(2122049802)))->to_f32()) == UINT32_C(2122049802));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2848402951)), bit_cast<float>(UINT32_C(2325576998)))->to_f32()) == UINT32_C(2848402951));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(982116028)), bit_cast<float>(UINT32_C(2317187467)))->to_f32()) == UINT32_C(982116028));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(5417704807092288842)), bit_cast<double>(UINT64_C(11458115339210975423)))->to_f64()) == UINT64_C(5417704807092288842));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(5306888566943064716)), bit_cast<double>(UINT64_C(13560253914302152139)))->to_f64()) == UINT64_C(5306888566943064716));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(2791030278657170439)), bit_cast<double>(UINT64_C(9423751710011603955)))->to_f64()) == UINT64_C(2791030278657170439));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(14493512931660601393)), bit_cast<double>(UINT64_C(14459238760182946131)))->to_f64()) == UINT64_C(14493541008051035082));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(13847269089137787654)), bit_cast<double>(UINT64_C(5913400236268010570)))->to_f64()) == UINT64_C(5913400236268010570));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2231979500)), bit_cast<float>(UINT32_C(711174153)))->to_f32()) == UINT32_C(711174153));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(3084976721)), bit_cast<float>(UINT32_C(843077785)))->to_f32()) == UINT32_C(3084970566));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(3522127374)), bit_cast<float>(UINT32_C(157500525)))->to_f32()) == UINT32_C(3522127374));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(78702389)), bit_cast<float>(UINT32_C(3468399689)))->to_f32()) == UINT32_C(3468399689));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2208228371)), bit_cast<float>(UINT32_C(1870536627)))->to_f32()) == UINT32_C(1870536627));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(1111252809067936271)), bit_cast<double>(UINT64_C(18353849863141451174)))->to_f64()) == UINT64_C(18353849863141451174));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(16156503866526998353)), bit_cast<double>(UINT64_C(16051628718393451642)))->to_f64()) == UINT64_C(16156503867159194550));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9478779231447112314)), bit_cast<double>(UINT64_C(3336259491488022866)))->to_f64()) == UINT64_C(3336259491488022866));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(11541137186853127278)), bit_cast<double>(UINT64_C(735421354967021004)))->to_f64()) == UINT64_C(11541137186853127278));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(18181384676953296798)), bit_cast<double>(UINT64_C(8211214354507491487)))->to_f64()) == UINT64_C(18181384676953296798));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(17455847474217352892)), bit_cast<double>(UINT64_C(8328504330151758329)))->to_f64()) == UINT64_C(8328504328029232689));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(8138029755241725240)), bit_cast<double>(UINT64_C(7967841770626914860)))->to_f64()) == UINT64_C(8138029755241745167));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(16644741111433920314)), bit_cast<double>(UINT64_C(7647005019700459394)))->to_f64()) == UINT64_C(7647005019700459387));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(6696851869641768443)), bit_cast<double>(UINT64_C(6935821972358342665)))->to_f64()) == UINT64_C(6935821972358342665));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(127567346952002978)), bit_cast<double>(UINT64_C(273820416703444795)))->to_f64()) == UINT64_C(273820416704834831));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(17221080860858566255)), bit_cast<double>(UINT64_C(18119355194379769652)))->to_f64()) == UINT64_C(18119355194379769652));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(5479469458864399218)), bit_cast<double>(UINT64_C(15063363222154738502)))->to_f64()) == UINT64_C(15063363222154738502));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(15191393426281101490)), bit_cast<double>(UINT64_C(2705322087145917275)))->to_f64()) == UINT64_C(15191393426281101490));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(12404517211283155052)), bit_cast<double>(UINT64_C(15933096090325362723)))->to_f64()) == UINT64_C(15933096090325362723));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(12941874353187635000)), bit_cast<double>(UINT64_C(149235811938438489)))->to_f64()) == UINT64_C(12941874353187635000));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2039859408)), bit_cast<float>(UINT32_C(2137384617)))->to_f32()) == UINT32_C(2137389410));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2135652809)), bit_cast<float>(UINT32_C(4113932278)))->to_f32()) == UINT32_C(2135652798));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2055837582)), bit_cast<float>(UINT32_C(4281461529)))->to_f32()) == UINT32_C(4281443917));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(4220448050)), bit_cast<float>(UINT32_C(4286022000)))->to_f32()) == UINT32_C(4286095178));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(4280642669)), bit_cast<float>(UINT32_C(4269109313)))->to_f32()) == UINT32_C(4284663933));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9214390167692528523)), bit_cast<double>(UINT64_C(9025765862177526868)))->to_f64()) == UINT64_C(9214390167692529673));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9218174330906182895)), bit_cast<double>(UINT64_C(9066655639269665468)))->to_f64()) == UINT64_C(9218174330906813073));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(18440065048487386960)), bit_cast<double>(UINT64_C(9166530475417861020)))->to_f64()) == UINT64_C(18440062016830479601));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(18341378616977760125)), bit_cast<double>(UINT64_C(9218376305633483958)))->to_f64()) == UINT64_C(9218376303911020838));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9214484525044672441)), bit_cast<double>(UINT64_C(18297568705700624757)))->to_f64()) == UINT64_C(9214484525042704878));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(5932680)), bit_cast<float>(UINT32_C(623)))->to_f32()) == UINT32_C(5933303));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(37)), bit_cast<float>(UINT32_C(2147483650)))->to_f32()) == UINT32_C(35));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2147483656)), bit_cast<float>(UINT32_C(3701056)))->to_f32()) == UINT32_C(3701048));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2147483668)), bit_cast<float>(UINT32_C(44113961)))->to_f32()) == UINT32_C(44113960));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(453)), bit_cast<float>(UINT32_C(2147507390)))->to_f32()) == UINT32_C(2147506937));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(5760669582171681)), bit_cast<double>(UINT64_C(9233067416817195210)))->to_f64()) == UINT64_C(9227994927942701939));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9301019945277718)), bit_cast<double>(UINT64_C(9236877899492518055)))->to_f64()) == UINT64_C(9231781722239704866));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9225260466475370890)), bit_cast<double>(UINT64_C(9229416573822848190)))->to_f64()) == UINT64_C(9231305003443443272));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(16303139584665809)), bit_cast<double>(UINT64_C(9240639734747285230)))->to_f64()) == UINT64_C(9227230270086150260));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9232116546764732939)), bit_cast<double>(UINT64_C(5103597037406761)))->to_f64()) == UINT64_C(9227012949727326178));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2139095038)), bit_cast<float>(UINT32_C(1937768448)))->to_f32()) == UINT32_C(2139095039));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9218868437227405310)), bit_cast<double>(UINT64_C(8980177656976769024)))->to_f64()) == UINT64_C(9218868437227405311));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(1073741824)), bit_cast<float>(UINT32_C(1073741824)))->to_f32()) == UINT32_C(1082130432));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(4611686018427387904)), bit_cast<double>(UINT64_C(4611686018427387904)))->to_f64()) == UINT64_C(4616189618054758400));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2139095039)), bit_cast<float>(UINT32_C(1929379839)))->to_f32()) == UINT32_C(2139095039));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.add", bit_cast<float>(UINT32_C(2139095039)), bit_cast<float>(UINT32_C(1929379840)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9218868437227405311)), bit_cast<double>(UINT64_C(8975674057349398527)))->to_f64()) == UINT64_C(9218868437227405311));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.add", bit_cast<double>(UINT64_C(9218868437227405311)), bit_cast<double>(UINT64_C(8975674057349398528)))->to_f64()) == UINT64_C(9218868437227405312));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1199570944)), bit_cast<float>(UINT32_C(754974720)))->to_f32()) == UINT32_C(1199570944));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4679240012837945344)), bit_cast<double>(UINT64_C(4440549232587309056)))->to_f64()) == UINT64_C(4679240012837945343));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(855638016)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(855638017)))->to_f32()) == UINT32_C(1065353215));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4363988038922010624)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4363988038922010625)))->to_f64()) == UINT64_C(4607182418800017407));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(183964211)), bit_cast<float>(UINT32_C(4211807167)))->to_f32()) == UINT32_C(2064323519));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(4213323727)), bit_cast<float>(UINT32_C(3575761746)))->to_f32()) == UINT32_C(4213323727));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1069169566)), bit_cast<float>(UINT32_C(2530290313)))->to_f32()) == UINT32_C(1069169566));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(88711906)), bit_cast<float>(UINT32_C(431212897)))->to_f32()) == UINT32_C(2578696545));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(919562194)), bit_cast<float>(UINT32_C(2319656354)))->to_f32()) == UINT32_C(919562194));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(12332465020357998661)), bit_cast<double>(UINT64_C(9766989582560416510)))->to_f64()) == UINT64_C(12332465020357998661));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(16318450733361321773)), bit_cast<double>(UINT64_C(13120762196173477233)))->to_f64()) == UINT64_C(16318450733361321773));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(2534186520144737456)), bit_cast<double>(UINT64_C(10065159679028096147)))->to_f64()) == UINT64_C(2534186520144737456));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(81253721542311597)), bit_cast<double>(UINT64_C(14524181566355681001)))->to_f64()) == UINT64_C(5300809529500905193));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(13189545483472981053)), bit_cast<double>(UINT64_C(11407195172005604952)))->to_f64()) == UINT64_C(13189545483472981053));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(4122014001)), bit_cast<float>(UINT32_C(4158487026)))->to_f32()) == UINT32_C(2010278623));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(4130431355)), bit_cast<float>(UINT32_C(1119299749)))->to_f32()) == UINT32_C(4130431355));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2517909066)), bit_cast<float>(UINT32_C(864524238)))->to_f32()) == UINT32_C(3012007886));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2573484334)), bit_cast<float>(UINT32_C(3114628459)))->to_f32()) == UINT32_C(967144811));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(4044667730)), bit_cast<float>(UINT32_C(576942556)))->to_f32()) == UINT32_C(4044667730));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(14742371419310964805)), bit_cast<double>(UINT64_C(17888404506408184249)))->to_f64()) == UINT64_C(8665032469553408441));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(2953146626865245854)), bit_cast<double>(UINT64_C(2577681730975527916)))->to_f64()) == UINT64_C(2953146626865245854));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(12932364735331397407)), bit_cast<double>(UINT64_C(2320782934320318207)))->to_f64()) == UINT64_C(12932364735331397407));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(9365060414983047910)), bit_cast<double>(UINT64_C(12353777816259046974)))->to_f64()) == UINT64_C(3130405779404271166));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(14336992446210099104)), bit_cast<double>(UINT64_C(5379485476305549444)))->to_f64()) == UINT64_C(14602857513160325252));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1869943590)), bit_cast<float>(UINT32_C(943887556)))->to_f32()) == UINT32_C(1869943590));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(3372906046)), bit_cast<float>(UINT32_C(2919590399)))->to_f32()) == UINT32_C(3372906046));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2912495853)), bit_cast<float>(UINT32_C(2745492671)))->to_f32()) == UINT32_C(2912495843));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(3096029999)), bit_cast<float>(UINT32_C(957859028)))->to_f32()) == UINT32_C(3109853804));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2939165019)), bit_cast<float>(UINT32_C(2346559691)))->to_f32()) == UINT32_C(2939165019));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(13126685627069188368)), bit_cast<double>(UINT64_C(17084005755352353256)))->to_f64()) == UINT64_C(7860633718497577448));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(17250804263238954355)), bit_cast<double>(UINT64_C(17897322818375888829)))->to_f64()) == UINT64_C(8673950781521113021));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(1024624387795162319)), bit_cast<double>(UINT64_C(5422801516870904507)))->to_f64()) == UINT64_C(14646173553725680315));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(11250563508203208480)), bit_cast<double>(UINT64_C(2160870138446053709)))->to_f64()) == UINT64_C(11384242175310282886));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(11315355526970152728)), bit_cast<double>(UINT64_C(13767999508795332779)))->to_f64()) == UINT64_C(4544627471940556971));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4259315722107263852)), bit_cast<double>(UINT64_C(4089445689175118070)))->to_f64()) == UINT64_C(4259315722107229795));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(188121565440651108)), bit_cast<double>(UINT64_C(62416789530785743)))->to_f64()) == UINT64_C(188121565409457039));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(3467770562990504390)), bit_cast<double>(UINT64_C(3710644584044210353)))->to_f64()) == UINT64_C(12934016620898986161));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(13655868372788825570)), bit_cast<double>(UINT64_C(13522732182992332383)))->to_f64()) == UINT64_C(13655868372781906121));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4496158230847685281)), bit_cast<double>(UINT64_C(4595312328816348364)))->to_f64()) == UINT64_C(13818684364224065885));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(10165048318361601487)), bit_cast<double>(UINT64_C(10384658282813060399)))->to_f64()) == UINT64_C(1161286245958284573));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(13982858477006823824)), bit_cast<double>(UINT64_C(6264462250080870922)))->to_f64()) == UINT64_C(15487834286935646730));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(5124509539958121241)), bit_cast<double>(UINT64_C(1953255029772502995)))->to_f64()) == UINT64_C(5124509539958121241));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(2408125051325635052)), bit_cast<double>(UINT64_C(10707017964771367822)))->to_f64()) == UINT64_C(2408125051325635052));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4352135458168599028)), bit_cast<double>(UINT64_C(1826599214642193119)))->to_f64()) == UINT64_C(4352135458168599028));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1102651427)), bit_cast<float>(UINT32_C(1078530011)))->to_f32()) == UINT32_C(1101004328));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4627206743602008890)), bit_cast<double>(UINT64_C(4614256656552045848)))->to_f64()) == UINT64_C(4626322463883005335));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1245125372)), bit_cast<float>(UINT32_C(1245125368)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1240736760)), bit_cast<float>(UINT32_C(1240736728)))->to_f32()) == UINT32_C(1082130432));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1240736760)), bit_cast<float>(UINT32_C(1240736712)))->to_f32()) == UINT32_C(1086324736));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1220759616)), bit_cast<float>(UINT32_C(1220759584)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1220759616)), bit_cast<float>(UINT32_C(1220759552)))->to_f32()) == UINT32_C(1073741824));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4838362400168542206)), bit_cast<double>(UINT64_C(4838362400168542204)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4835858800541171708)), bit_cast<double>(UINT64_C(4835858800541171692)))->to_f64()) == UINT64_C(4616189618054758400));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4835858800541171708)), bit_cast<double>(UINT64_C(4835858800541171684)))->to_f64()) == UINT64_C(4618441417868443648));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4825251601286430752)), bit_cast<double>(UINT64_C(4825251601286430736)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4825251601286430752)), bit_cast<double>(UINT64_C(4825251601286430720)))->to_f64()) == UINT64_C(4611686018427387904));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(8388608)), bit_cast<float>(UINT32_C(8388607)))->to_f32()) == UINT32_C(1));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4503599627370496)), bit_cast<double>(UINT64_C(4503599627370495)))->to_f64()) == UINT64_C(1));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1065353217)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(876609536));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1065353217)), bit_cast<float>(UINT32_C(1065353216)))->to_f32()) == UINT32_C(872415232));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(864026624));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4607182418800017409)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4375247037990436864));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4607182418800017409)), bit_cast<double>(UINT64_C(4607182418800017408)))->to_f64()) == UINT64_C(4372995238176751616));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4368491638549381120));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2139095039)), bit_cast<float>(UINT32_C(1929379839)))->to_f32()) == UINT32_C(2139095039));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sub", bit_cast<float>(UINT32_C(2139095039)), bit_cast<float>(UINT32_C(1929379840)))->to_f32()) == UINT32_C(2139095038));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(9218868437227405311)), bit_cast<double>(UINT64_C(8975674057349398527)))->to_f64()) == UINT64_C(9218868437227405311));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sub", bit_cast<double>(UINT64_C(9218868437227405311)), bit_cast<double>(UINT64_C(8975674057349398528)))->to_f64()) == UINT64_C(9218868437227405310));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1482907561)), bit_cast<float>(UINT32_C(1482907561)))->to_f32()) == UINT32_C(1900671689));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1621981420)), bit_cast<float>(UINT32_C(1621981420)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1761892689)), bit_cast<float>(UINT32_C(1761892689)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4831355200913801216)), bit_cast<double>(UINT64_C(4831355200913801216)))->to_f64()) == UINT64_C(5055640609639927018));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4906019910204099648)), bit_cast<double>(UINT64_C(4906019910204099648)))->to_f64()) == UINT64_C(5205425776111082661));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4981134201117475473)), bit_cast<double>(UINT64_C(4981134201117475473)))->to_f64()) == UINT64_C(5355091182177117339));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1323067183)), bit_cast<float>(UINT32_C(1351920719)))->to_f32()) == UINT32_C(1610612737));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4745541551160033280)), bit_cast<double>(UINT64_C(4761032175258435584)))->to_f64()) == UINT64_C(4899916394579099649));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1117401907)), bit_cast<float>(UINT32_C(1146388480)))->to_f32()) == UINT32_C(1199570688));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4635125847112967782)), bit_cast<double>(UINT64_C(4650687894887858176)))->to_f64()) == UINT64_C(4679239875398991871));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3725225879)), bit_cast<float>(UINT32_C(767181884)))->to_f32()) == UINT32_C(3427365876));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(4071298289)), bit_cast<float>(UINT32_C(2363594761)))->to_f32()) == UINT32_C(1075233538));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3990403914)), bit_cast<float>(UINT32_C(2406636213)))->to_f32()) == UINT32_C(1036856791));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3876262739)), bit_cast<float>(UINT32_C(2590162616)))->to_f32()) == UINT32_C(1106664791));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1513973689)), bit_cast<float>(UINT32_C(1110852822)))->to_f32()) == UINT32_C(1560730283));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(15745248579468343268)), bit_cast<double>(UINT64_C(8867411559652116184)))->to_f64()) == UINT64_C(18442240474082181120));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(9393595877903301723)), bit_cast<double>(UINT64_C(12847704090045979814)))->to_f64()) == UINT64_C(0));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(7339743909496900438)), bit_cast<double>(UINT64_C(14312273837817528234)))->to_f64()) == UINT64_C(17044856006279008467));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(12422633289194844785)), bit_cast<double>(UINT64_C(7233496047441461849)))->to_f64()) == UINT64_C(15049217706304651865));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(8188526721198436258)), bit_cast<double>(UINT64_C(745378815681991665)))->to_f64()) == UINT64_C(4327221634240578200));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(2468326353)), bit_cast<float>(UINT32_C(3984723636)))->to_f32()) == UINT32_C(1092762840));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1680245441)), bit_cast<float>(UINT32_C(1228341789)))->to_f32()) == UINT32_C(1844318640));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(2945969408)), bit_cast<float>(UINT32_C(3840981390)))->to_f32()) == UINT32_C(1427037263));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1631446143)), bit_cast<float>(UINT32_C(3340593865)))->to_f32()) == UINT32_C(3907618991));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1321841569)), bit_cast<float>(UINT32_C(3771977928)))->to_f32()) == UINT32_C(4029080461));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(10956034376207055635)), bit_cast<double>(UINT64_C(3195464683520095288)))->to_f64()) == UINT64_C(9544600684599159351));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(3366372084365197849)), bit_cast<double>(UINT64_C(10971437597834234015)))->to_f64()) == UINT64_C(9730951521726442211));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(15316253934569525376)), bit_cast<double>(UINT64_C(17593766689751523793)))->to_f64()) == UINT64_C(9218868437227405312));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(8873430008942894499)), bit_cast<double>(UINT64_C(2630310872370005737)))->to_f64()) == UINT64_C(6896620497836925834));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(6138390736122864607)), bit_cast<double>(UINT64_C(14591737303103877464)))->to_f64()) == UINT64_C(16122953269734234204));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3603447621)), bit_cast<float>(UINT32_C(4012809012)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3192278970)), bit_cast<float>(UINT32_C(242309673)))->to_f32()) == UINT32_C(2369451750));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3060150317)), bit_cast<float>(UINT32_C(1953896717)))->to_f32()) == UINT32_C(3948759250));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3685735869)), bit_cast<float>(UINT32_C(265571119)))->to_f32()) == UINT32_C(2886850375));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3355295625)), bit_cast<float>(UINT32_C(69023757)))->to_f32()) == UINT32_C(2359023110));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(11598370094301102699)), bit_cast<double>(UINT64_C(15783697741936198553)))->to_f64()) == UINT64_C(4328598597203697163));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(6760137556672200005)), bit_cast<double>(UINT64_C(10390971429121674926)))->to_f64()) == UINT64_C(12543987340819631453));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(14608361260346079328)), bit_cast<double>(UINT64_C(6227029768418337647)))->to_f64()) == UINT64_C(16228420234814429284));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(8069908676175581646)), bit_cast<double>(UINT64_C(15517844864458283108)))->to_f64()) == UINT64_C(18442240474082181120));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4973816491418843402)), bit_cast<double>(UINT64_C(4922606816281832528)))->to_f64()) == UINT64_C(5289311430451755328));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(3075846375446710711)), bit_cast<double>(UINT64_C(2019524319895558702)))->to_f64()) == UINT64_C(488220554609224151));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(13792389967993824121)), bit_cast<double>(UINT64_C(7865224186729676301)))->to_f64()) == UINT64_C(17051039770050770421));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(15483491341737357200)), bit_cast<double>(UINT64_C(10898188329492193507)))->to_f64()) == UINT64_C(3327855557076626973));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(8100886621587996114)), bit_cast<double>(UINT64_C(4881220253517731398)))->to_f64()) == UINT64_C(8375006889399652877));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(12589892576446671178)), bit_cast<double>(UINT64_C(8646729507413822745)))->to_f64()) == UINT64_C(16629483498509877989));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(1913383041739811140)), bit_cast<double>(UINT64_C(2696786534754768330)))->to_f64()) == UINT64_C(3776602816350777));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(13576886274997223712)), bit_cast<double>(UINT64_C(9480836654241272360)))->to_f64()) == UINT64_C(4406081533924885));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(11636123185307544831)), bit_cast<double>(UINT64_C(11418839304735837198)))->to_f64()) == UINT64_C(2919536087652621));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(10357270161024523488)), bit_cast<double>(UINT64_C(3460198093814186274)))->to_f64()) == UINT64_C(9223701543089011575));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(11506848031881565957)), bit_cast<double>(UINT64_C(11547514064126512393)))->to_f64()) == UINT64_C(2474372522531115));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(8446730755803745435)), bit_cast<double>(UINT64_C(640105622936255012)))->to_f64()) == UINT64_C(4479981512316931443));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4578331547514318947)), bit_cast<double>(UINT64_C(3937894457345907544)))->to_f64()) == UINT64_C(3909603143436010489));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(13839181621982597923)), bit_cast<double>(UINT64_C(4426983905639375259)))->to_f64()) == UINT64_C(13658985409477228135));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(2931365221683549507)), bit_cast<double>(UINT64_C(3687257801017498184)))->to_f64()) == UINT64_C(2011503789135851990));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(14180592859625794472)), bit_cast<double>(UINT64_C(3043918530412552819)))->to_f64()) == UINT64_C(12617399980269247921));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(436207616)), bit_cast<float>(UINT32_C(436207616)))->to_f32()) == UINT32_C(0));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(436207617)), bit_cast<float>(UINT32_C(436207617)))->to_f32()) == UINT32_C(1));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(2186111271319845836)), bit_cast<double>(UINT64_C(2186111271319845836)))->to_f64()) == UINT64_C(0));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(2186111271319845837)), bit_cast<double>(UINT64_C(2186111271319845837)))->to_f64()) == UINT64_C(1));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1602224127)), bit_cast<float>(UINT32_C(1602224127)))->to_f32()) == UINT32_C(2139095038));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1602224128)), bit_cast<float>(UINT32_C(1602224128)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(6913025428013711359)), bit_cast<double>(UINT64_C(6913025428013711359)))->to_f64()) == UINT64_C(9218868437227405310));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(6913025428013711360)), bit_cast<double>(UINT64_C(6913025428013711360)))->to_f64()) == UINT64_C(9218868437227405312));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1065353217)), bit_cast<float>(UINT32_C(1065353217)))->to_f32()) == UINT32_C(1065353218));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1065353215)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(1065353214));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4607182418800017409)), bit_cast<double>(UINT64_C(4607182418800017409)))->to_f64()) == UINT64_C(4607182418800017410));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4607182418800017407)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017406));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1065353217)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(1065353218)), bit_cast<float>(UINT32_C(1065353214)))->to_f32()) == UINT32_C(1065353217));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4607182418800017409)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4607182418800017410)), bit_cast<double>(UINT64_C(4607182418800017406)))->to_f64()) == UINT64_C(4607182418800017409));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(8388608)), bit_cast<float>(UINT32_C(872415232)))->to_f32()) == UINT32_C(1));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.mul", bit_cast<double>(UINT64_C(4503599627370496)), bit_cast<double>(UINT64_C(4372995238176751616)))->to_f64()) == UINT64_C(1));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.mul", bit_cast<float>(UINT32_C(3246392064)), bit_cast<float>(UINT32_C(212992)))->to_f32()) == UINT32_C(2150891832));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1066388847)), bit_cast<float>(UINT32_C(1120403456)))->to_f32()) == UINT32_C(1010307378));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1258294259)), bit_cast<float>(UINT32_C(1262485497)))->to_f32()) == UINT32_C(1059764896));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1199570944)), bit_cast<float>(UINT32_C(754974720)))->to_f32()) == UINT32_C(1509949440));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1072586677)), bit_cast<float>(UINT32_C(2139095039)))->to_f32()) == UINT32_C(3905517));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1082130432)), bit_cast<float>(UINT32_C(1077936128)))->to_f32()) == UINT32_C(1068149419));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607738418748954166)), bit_cast<double>(UINT64_C(4636737291354636288)))->to_f64()) == UINT64_C(4577629909238726725));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4710766852517658624)), bit_cast<double>(UINT64_C(4713017006285127680)))->to_f64()) == UINT64_C(4604182212107680295));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4679240012837945344)), bit_cast<double>(UINT64_C(4440549232587309056)))->to_f64()) == UINT64_C(4845873199050653696));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4611065853604003840)), bit_cast<double>(UINT64_C(9218868437227405311)))->to_f64()) == UINT64_C(2096758607839232));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4616189618054758400)), bit_cast<double>(UINT64_C(4613937818241073152)))->to_f64()) == UINT64_C(4608683618675807573));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1249905654)), bit_cast<float>(UINT32_C(1245708284)))->to_f32()) == UINT32_C(1068153505));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4706263254500900864)), bit_cast<double>(UINT64_C(4704009808640999424)))->to_f64()) == UINT64_C(4608685812450356035));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(666187309)), bit_cast<float>(UINT32_C(2138899896)))->to_f32()) == UINT32_C(0));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(338737113)), bit_cast<float>(UINT32_C(1637454009)))->to_f32()) == UINT32_C(0));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3351999420)), bit_cast<float>(UINT32_C(401966635)))->to_f32()) == UINT32_C(4015268357));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(2582720800)), bit_cast<float>(UINT32_C(2197197239)))->to_f32()) == UINT32_C(1450863298));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3564182439)), bit_cast<float>(UINT32_C(397999726)))->to_f32()) == UINT32_C(4230402947));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(5269602717919885505)), bit_cast<double>(UINT64_C(5615431061534361830)))->to_f64()) == UINT64_C(4261119458085367075));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(1791703022234099881)), bit_cast<double>(UINT64_C(230587289790163684)))->to_f64()) == UINT64_C(6167818452243445017));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(15176390632865983384)), bit_cast<double>(UINT64_C(7489729865403831125)))->to_f64()) == UINT64_C(12293662509603441500));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(16945752639368638170)), bit_cast<double>(UINT64_C(5718505335991307775)))->to_f64()) == UINT64_C(15834399302320062011));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(16263708435887736913)), bit_cast<double>(UINT64_C(6648866667391375614)))->to_f64()) == UINT64_C(14221856927329063502));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3798033061)), bit_cast<float>(UINT32_C(2491443361)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(686927199)), bit_cast<float>(UINT32_C(1440960248)))->to_f32()) == UINT32_C(310908762));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1067646869)), bit_cast<float>(UINT32_C(3960423338)))->to_f32()) == UINT32_C(2467406247));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(642177221)), bit_cast<float>(UINT32_C(2685135)))->to_f32()) == UINT32_C(1713065419));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1824271560)), bit_cast<float>(UINT32_C(1797890210)))->to_f32()) == UINT32_C(1091436270));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4278321332874065)), bit_cast<double>(UINT64_C(15464375907975098426)))->to_f64()) == UINT64_C(9223372036854775808));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(9385779280320516508)), bit_cast<double>(UINT64_C(2195352144435258723)))->to_f64()) == UINT64_C(11796946241575527184));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(12019785500442997560)), bit_cast<double>(UINT64_C(14033717547286793792)))->to_f64()) == UINT64_C(2592881844429368931));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(14192622858179995755)), bit_cast<double>(UINT64_C(1048270709368415171)))->to_f64()) == UINT64_C(17751311910175316838));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(14895971708944847415)), bit_cast<double>(UINT64_C(14082502105592202184)))->to_f64()) == UINT64_C(5420603229995464966));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1286756690)), bit_cast<float>(UINT32_C(74754985)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3861505243)), bit_cast<float>(UINT32_C(1298875600)))->to_f32()) == UINT32_C(3627605330));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1387472197)), bit_cast<float>(UINT32_C(4021087697)))->to_f32()) == UINT32_C(2726599162));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(4149014653)), bit_cast<float>(UINT32_C(3294714580)))->to_f32()) == UINT32_C(1919471347));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3987554477)), bit_cast<float>(UINT32_C(3327836421)))->to_f32()) == UINT32_C(1724563548));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(10882983485852580843)), bit_cast<double>(UINT64_C(1499380901194126188)))->to_f64()) == UINT64_C(13990715555071506017));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(17353632673902705731)), bit_cast<double>(UINT64_C(11343375610449883809)))->to_f64()) == UINT64_C(9218868437227405312));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(10471640091267549911)), bit_cast<double>(UINT64_C(4317563730789156718)))->to_f64()) == UINT64_C(10760831595995331201));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(15262578458239868670)), bit_cast<double>(UINT64_C(11184694400998603321)))->to_f64()) == UINT64_C(8684356686754640262));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(5423766533942924987)), bit_cast<double>(UINT64_C(14797877595923399406)))->to_f64()) == UINT64_C(13679565210380085385));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(16467910284400317286)), bit_cast<double>(UINT64_C(14710955777971283471)))->to_f64()) == UINT64_C(6363956244686200611));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(16290965053652735591)), bit_cast<double>(UINT64_C(15317706837775392625)))->to_f64()) == UINT64_C(5580355845867636249));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(5440366292977110369)), bit_cast<double>(UINT64_C(18177315027663270891)))->to_f64()) == UINT64_C(10316437533262127859));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(5586144947709395659)), bit_cast<double>(UINT64_C(6532436425888624877)))->to_f64()) == UINT64_C(3660708720660625999));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(17550005606375580620)), bit_cast<double>(UINT64_C(6180045224129992598)))->to_f64()) == UINT64_C(15976575755200563719));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4611065853588275309)), bit_cast<double>(UINT64_C(9218868437227405311)))->to_f64()) == UINT64_C(2096758603907099));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(58005932411648970)), bit_cast<double>(UINT64_C(4662638783615926141)))->to_f64()) == UINT64_C(3222112482593593));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(13185764271695251812)), bit_cast<double>(UINT64_C(17795032469661562376)))->to_f64()) == UINT64_C(1594123367530375));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(12062544014359965409)), bit_cast<double>(UINT64_C(16674780236028867992)))->to_f64()) == UINT64_C(1036869663772871));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(752499975442349235)), bit_cast<double>(UINT64_C(5356690663768240614)))->to_f64()) == UINT64_C(3442089173194313));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(83041154348962762)), bit_cast<double>(UINT64_C(13934889252531101931)))->to_f64()) == UINT64_C(9223458798833500621));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1817629909)), bit_cast<float>(UINT32_C(1421132838)))->to_f32()) == UINT32_C(1461198615));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1824604388)), bit_cast<float>(UINT32_C(4105258014)))->to_f32()) == UINT32_C(3079375694));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1747858929)), bit_cast<float>(UINT32_C(1063784191)))->to_f32()) == UINT32_C(1749036825));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(3378374953)), bit_cast<float>(UINT32_C(3497907368)))->to_f32()) == UINT32_C(945802923));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(2861015275)), bit_cast<float>(UINT32_C(3684669151)))->to_f32()) == UINT32_C(240750700));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4885037015672297625)), bit_cast<double>(UINT64_C(9954263091431620051)))->to_f64()) == UINT64_C(17984289216286432053));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4022347395424227722)), bit_cast<double>(UINT64_C(11486191764643320419)))->to_f64()) == UINT64_C(15589554694846453438));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(7623973190248181230)), bit_cast<double>(UINT64_C(7481900282945497881)))->to_f64()) == UINT64_C(4748664889769504925));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(14650287530633645126)), bit_cast<double>(UINT64_C(8091500841285620267)))->to_f64()) == UINT64_C(11165393291297270552));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(9910334119372230161)), bit_cast<double>(UINT64_C(10921408834055405722)))->to_f64()) == UINT64_C(3596021921286071170));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4352764235752579571)), bit_cast<double>(UINT64_C(4610853254537913145)))->to_f64()) == UINT64_C(4348952422448611708));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4148344307949876337)), bit_cast<double>(UINT64_C(13642564096968604240)))->to_f64()) == UINT64_C(13559333871418047670));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4425554483259831683)), bit_cast<double>(UINT64_C(4103199251532205583)))->to_f64()) == UINT64_C(4929315895081747238));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(5011653323436109419)), bit_cast<double>(UINT64_C(5044067306150920275)))->to_f64()) == UINT64_C(4574739988274663188));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4558988817252519457)), bit_cast<double>(UINT64_C(14066629987516208597)))->to_f64()) == UINT64_C(13546063418479940250));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(8388608)), bit_cast<float>(UINT32_C(8388607)))->to_f32()) == UINT32_C(1065353217));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(8388607)), bit_cast<float>(UINT32_C(8388608)))->to_f32()) == UINT32_C(1065353214));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4503599627370496)), bit_cast<double>(UINT64_C(4503599627370495)))->to_f64()) == UINT64_C(4607182418800017409));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4503599627370495)), bit_cast<double>(UINT64_C(4503599627370496)))->to_f64()) == UINT64_C(4607182418800017406));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(880803839)), bit_cast<float>(UINT32_C(2139095039)))->to_f32()) == UINT32_C(0));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(880803840)), bit_cast<float>(UINT32_C(2139095039)))->to_f32()) == UINT32_C(1));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4377498837804122111)), bit_cast<double>(UINT64_C(9218868437227405311)))->to_f64()) == UINT64_C(0));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4377498837804122112)), bit_cast<double>(UINT64_C(9218868437227405311)))->to_f64()) == UINT64_C(1));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(2097152)))->to_f32()) == UINT32_C(2139095040));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(2097153)))->to_f32()) == UINT32_C(2139095032));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(1125899906842624)))->to_f64()) == UINT64_C(9218868437227405312));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(1125899906842625)))->to_f64()) == UINT64_C(9218868437227405304));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(2122317825)))->to_f32()) == UINT32_C(8388607));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(2122317824)))->to_f32()) == UINT32_C(8388608));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(9209861237972664321)))->to_f64()) == UINT64_C(4503599627370495));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(9209861237972664320)))->to_f64()) == UINT64_C(4503599627370496));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(1077936128)))->to_f32()) == UINT32_C(1051372203));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1077936128)), bit_cast<float>(UINT32_C(1091567616)))->to_f32()) == UINT32_C(1051372203));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1091567616)), bit_cast<float>(UINT32_C(1104674816)))->to_f32()) == UINT32_C(1051372203));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4613937818241073152)))->to_f64()) == UINT64_C(4599676419421066581));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4613937818241073152)), bit_cast<double>(UINT64_C(4621256167635550208)))->to_f64()) == UINT64_C(4599676419421066581));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4621256167635550208)), bit_cast<double>(UINT64_C(4628293042053316608)))->to_f64()) == UINT64_C(4599676419421066581));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353217)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(1065353218));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353215)), bit_cast<float>(UINT32_C(1065353217)))->to_f32()) == UINT32_C(1065353213));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(1065353217));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.div", bit_cast<float>(UINT32_C(1065353216)), bit_cast<float>(UINT32_C(1065353217)))->to_f32()) == UINT32_C(1065353214));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017409)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017410));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017407)), bit_cast<double>(UINT64_C(4607182418800017409)))->to_f64()) == UINT64_C(4607182418800017405));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017409));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.div", bit_cast<double>(UINT64_C(4607182418800017408)), bit_cast<double>(UINT64_C(4607182418800017409)))->to_f64()) == UINT64_C(4607182418800017406));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1126891520)))->to_f32()) == UINT32_C(1095842342));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(875341566)))->to_f32()) == UINT32_C(970079310));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4640220544191430656)))->to_f64()) == UINT64_C(4623551143926461685));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4505170691092029701)))->to_f64()) == UINT64_C(4556032630010904473));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(3868634135368364633)))->to_f64()) == UINT64_C(4237908228221851551));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(6130334638238385213)))->to_f64()) == UINT64_C(5368736472460186647));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(6420749722515481850)))->to_f64()) == UINT64_C(5513761933181195411));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4441983858611369811)))->to_f64()) == UINT64_C(4524423892028972029));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(2943222801950574478)))->to_f64()) == UINT64_C(3775077603066051757));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017407));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1040498738)))->to_f32()) == UINT32_C(1052268824));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1911349112)))->to_f32()) == UINT32_C(1487806505));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1033984731)))->to_f32()) == UINT32_C(1049605767));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(471548520)))->to_f32()) == UINT32_C(768040305));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(980180519)))->to_f32()) == UINT32_C(1022754037));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(447478826231748356)))->to_f64()) == UINT64_C(2527268346316778217));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(7882765141420635228)))->to_f64()) == UINT64_C(6244818117372907505));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(6345006020483303032)))->to_f64()) == UINT64_C(5476089630784211276));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(5080974719163899092)))->to_f64()) == UINT64_C(4843851732197030563));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(9108179429173493573)))->to_f64()) == UINT64_C(6857570252025178944));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1293112087)))->to_f32()) == UINT32_C(1178743848));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(118173697)))->to_f32()) == UINT32_C(591184817));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(941555112)))->to_f32()) == UINT32_C(1003077404));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(60323222)))->to_f32()) == UINT32_C(562803203));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(40220718)))->to_f32()) == UINT32_C(552763653));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(7741365502393472048)))->to_f64()) == UINT64_C(6174272493021072850));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(1175297548666390979)))->to_f64()) == UINT64_C(2891239701856850373));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4474969389470739153)))->to_f64()) == UINT64_C(4540897185465678583));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(3521792205891300764)))->to_f64()) == UINT64_C(4064104284248214854));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(8798159938601760820)))->to_f64()) == UINT64_C(6702520650372831162));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(2058533950)))->to_f32()) == UINT32_C(1561805138));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1194962978)))->to_f32()) == UINT32_C(1129973536));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1062209384)))->to_f32()) == UINT32_C(1063699830));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(339551808)))->to_f32()) == UINT32_C(702287090));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(279876202)))->to_f32()) == UINT32_C(672496559));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(7933654283200418420)))->to_f64()) == UINT64_C(6270248298536475417));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(2893298197477532149)))->to_f64()) == UINT64_C(3750137482611732493));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(8954101765007123282)))->to_f64()) == UINT64_C(6780419764181964566));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4405641787023763989)))->to_f64()) == UINT64_C(4506213966714545194));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(2394824404681191749)))->to_f64()) == UINT64_C(3500764341454448999));
   CHECK(check_nan(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(9494538992465685200)))));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(5074882158241187075)))->to_f64()) == UINT64_C(4841025724322244342));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(1187437724299488295)))->to_f64()) == UINT64_C(2897120674751402313));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(3368223178643061438)))->to_f64()) == UINT64_C(3987382964717611901));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(7161993531047854177)))->to_f64()) == UINT64_C(5884408968142469554));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1065353217)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1065353218)))->to_f32()) == UINT32_C(1065353217));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4607182418800017409)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4607182418800017410)))->to_f64()) == UINT64_C(4607182418800017409));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1065353214)))->to_f32()) == UINT32_C(1065353215));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.sqrt", bit_cast<float>(UINT32_C(1065353213)))->to_f32()) == UINT32_C(1065353214));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4607182418800017406)))->to_f64()) == UINT64_C(4607182418800017407));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.sqrt", bit_cast<double>(UINT64_C(4607182418800017405)))->to_f64()) == UINT64_C(4607182418800017406));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.abs", bit_cast<float>(UINT32_C(2139156962)))->to_f32()) == UINT32_C(2139156962));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.abs", bit_cast<float>(UINT32_C(4286640610)))->to_f32()) == UINT32_C(2139156962));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.abs", bit_cast<double>(UINT64_C(9218868441285556843)))->to_f64()) == UINT64_C(9218868441285556843));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.abs", bit_cast<double>(UINT64_C(18442240478140332651)))->to_f64()) == UINT64_C(9218868441285556843));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.neg", bit_cast<float>(UINT32_C(2139156962)))->to_f32()) == UINT32_C(4286640610));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.neg", bit_cast<float>(UINT32_C(4286640610)))->to_f32()) == UINT32_C(2139156962));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.neg", bit_cast<double>(UINT64_C(9218868441285556843)))->to_f64()) == UINT64_C(18442240478140332651));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.neg", bit_cast<double>(UINT64_C(18442240478140332651)))->to_f64()) == UINT64_C(9218868441285556843));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.copysign", bit_cast<float>(UINT32_C(2139156962)), bit_cast<float>(UINT32_C(2143289344)))->to_f32()) == UINT32_C(2139156962));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.copysign", bit_cast<float>(UINT32_C(2139156962)), bit_cast<float>(UINT32_C(4290772992)))->to_f32()) == UINT32_C(4286640610));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.copysign", bit_cast<float>(UINT32_C(4286640610)), bit_cast<float>(UINT32_C(2143289344)))->to_f32()) == UINT32_C(2139156962));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.copysign", bit_cast<float>(UINT32_C(4286640610)), bit_cast<float>(UINT32_C(4290772992)))->to_f32()) == UINT32_C(4286640610));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.copysign", bit_cast<double>(UINT64_C(9218868441285556843)), bit_cast<double>(UINT64_C(9221120237041090560)))->to_f64()) == UINT64_C(9218868441285556843));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.copysign", bit_cast<double>(UINT64_C(9218868441285556843)), bit_cast<double>(UINT64_C(18444492273895866368)))->to_f64()) == UINT64_C(18442240478140332651));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.copysign", bit_cast<double>(UINT64_C(18442240478140332651)), bit_cast<double>(UINT64_C(9221120237041090560)))->to_f64()) == UINT64_C(9218868441285556843));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.copysign", bit_cast<double>(UINT64_C(18442240478140332651)), bit_cast<double>(UINT64_C(18444492273895866368)))->to_f64()) == UINT64_C(18442240478140332651));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(1065353215)))->to_f32()) == UINT32_C(1065353216));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(1065353217)))->to_f32()) == UINT32_C(1073741824));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(4607182418800017407)))->to_f64()) == UINT64_C(4607182418800017408));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(4607182418800017409)))->to_f64()) == UINT64_C(4611686018427387904));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(1258291199)))->to_f32()) == UINT32_C(1258291200));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(3405774847)))->to_f32()) == UINT32_C(3405774846));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(4841369599423283199)))->to_f64()) == UINT64_C(4841369599423283200));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(14064741636278059007)))->to_f64()) == UINT64_C(14064741636278059006));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(1266679807)))->to_f32()) == UINT32_C(1266679807));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.ceil", bit_cast<float>(UINT32_C(3414163455)))->to_f32()) == UINT32_C(3414163455));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(4845873199050653695)))->to_f64()) == UINT64_C(4845873199050653695));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.ceil", bit_cast<double>(UINT64_C(14069245235905429503)))->to_f64()) == UINT64_C(14069245235905429503));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.floor", bit_cast<float>(UINT32_C(3212836863)))->to_f32()) == UINT32_C(3212836864));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.floor", bit_cast<float>(UINT32_C(3212836865)))->to_f32()) == UINT32_C(3221225472));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.floor", bit_cast<double>(UINT64_C(13830554455654793215)))->to_f64()) == UINT64_C(13830554455654793216));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.floor", bit_cast<double>(UINT64_C(13830554455654793217)))->to_f64()) == UINT64_C(13835058055282163712));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.floor", bit_cast<float>(UINT32_C(3405774847)))->to_f32()) == UINT32_C(3405774848));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.floor", bit_cast<float>(UINT32_C(1258291199)))->to_f32()) == UINT32_C(1258291198));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.floor", bit_cast<double>(UINT64_C(14064741636278059007)))->to_f64()) == UINT64_C(14064741636278059008));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.floor", bit_cast<double>(UINT64_C(4841369599423283199)))->to_f64()) == UINT64_C(4841369599423283198));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.floor", bit_cast<float>(UINT32_C(1202524032)))->to_f32()) == UINT32_C(1202524032));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.floor", bit_cast<double>(UINT64_C(4680825439885721600)))->to_f64()) == UINT64_C(4680825439885721600));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.trunc", bit_cast<float>(UINT32_C(3405774847)))->to_f32()) == UINT32_C(3405774846));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.trunc", bit_cast<float>(UINT32_C(1258291199)))->to_f32()) == UINT32_C(1258291198));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.trunc", bit_cast<double>(UINT64_C(14064741636278059007)))->to_f64()) == UINT64_C(14064741636278059006));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.trunc", bit_cast<double>(UINT64_C(4841369599423283199)))->to_f64()) == UINT64_C(4841369599423283198));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1258291201)))->to_f32()) == UINT32_C(1258291201));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1258291202)))->to_f32()) == UINT32_C(1258291202));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1056964607)))->to_f32()) == UINT32_C(0));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1468006399)))->to_f32()) == UINT32_C(1468006399));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(4841369599423283201)))->to_f64()) == UINT64_C(4841369599423283201));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(4841369599423283202)))->to_f64()) == UINT64_C(4841369599423283202));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(4602678819172646911)))->to_f64()) == UINT64_C(0));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(5084563979301289983)))->to_f64()) == UINT64_C(5084563979301289983));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1083179008)))->to_f32()) == UINT32_C(1082130432));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(3230662656)))->to_f32()) == UINT32_C(3229614080));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(3227516928)))->to_f32()) == UINT32_C(3229614080));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(4616752568008179712)))->to_f64()) == UINT64_C(4616189618054758400));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(13840124604862955520)))->to_f64()) == UINT64_C(13839561654909534208));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(13838435755002691584)))->to_f64()) == UINT64_C(13839561654909534208));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(3405774847)))->to_f32()) == UINT32_C(3405774848));
   CHECK(bit_cast<uint32_t>(bkend.call_with_return(nullptr, "env", "f32.nearest", bit_cast<float>(UINT32_C(1258291199)))->to_f32()) == UINT32_C(1258291200));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(14064741636278059007)))->to_f64()) == UINT64_C(14064741636278059008));
   CHECK(bit_cast<uint64_t>(bkend.call_with_return(nullptr, "env", "f64.nearest", bit_cast<double>(UINT64_C(4841369599423283199)))->to_f64()) == UINT64_C(4841369599423283200));
}

